package com.example.jimanguang.Repositories.untils;

import org.springframework.stereotype.Component;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.regex.Pattern;

@Component
public class StringUtils {//字符串工具类
   //正则表达式
   //电话
   //邮箱
//   private static final String REGEX_MOBILE="((\\+86|0086)?\\s*)((134[0-8]\\d{7})|"+
//           "(((13([0-3]|[5-9]))|(14[5-9])|15([0-3]|[5-9])|(16(2|[5-7]))|17([0-3]|[5-9])|"+
//           "18[0-9]|19(1|[8-9]))\\d{8})|(14(0|1|4)0\\d{7})|(1740([0-5]|[6-9]|[10-12])\\d{7}))";
//   private static final String REGEX_MAIL="^([a-z0-9A-z]+[-|_|\\.]?)+[a-z0-9A-z]@([a-z0-9A-z]+(-[a-z0-9A-z]+)?\\.)+[a-zA-z]{2,}$";

    private static final String REGEX_MOBILE="[1]\\d{10}$";
    private static final String REGEX_MAIL="^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$";
//    matches是Pattern类中的一个静态方法，用于检查给定的字符串是否符合给定的正则表达式模式。如果满足正则表达式，则返回true，否则返回false。
   public static boolean validPhone(String phone){
       if(StringUtils.isEmpty(phone)){
           return false;
       }
return Pattern.matches(REGEX_MOBILE,phone);


   }
    public static boolean validMail(String mail){
        if(StringUtils.isEmpty(mail)){
            return false;
        }
        return Pattern.matches(REGEX_MAIL,mail);


    }


public static String md5Encode(String origin,String salt){//DM5类型的密码加密器
    try{
        MessageDigest digest = MessageDigest.getInstance("MD5");
        if(!isEmpty((salt))){ //括号仅仅管理表达式中运算的优先顺序。
            origin+=salt;//origin=origin+salit相当与1+2;,两个字符串相加
        }
        digest.update(origin.getBytes());//整体来说是吧这段字符串变为2进制，.update作用是将字符串 origin 的字节数组作为输入，更新摘要的内容。origin.getBytes() 将 String 类型的对象 origin 转换成一个 byte 类型的数组
        byte[] bytes=digest.digest();//digest.digest() 方法返回一个 byte 数组，再次封装到bytes中
        int i;
        StringBuilder buffer = new StringBuilder("");//字符串容器，用来装东西的
        for(byte b:bytes){
            i=b;
            if(i<0){
                i+=256;
            }
            if(i<16){
                buffer.append("0");
            }
            buffer.append(Integer.toHexString(i));
        }//这段作用是将字节数组中的每一个字节转换为十六进制表示，并将其组成一个完整的十六进制字符串。这种方式通常用于按十六进制表示的 Hash 值的输出
        return buffer.toString(); //最后返回一个字符串编码
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
        return null;
    }
}
public static boolean isEmpty(String str){ //返回值为false为存在
    boolean isNull=str==null;
    return isNull||str.isEmpty();//isEmpty()是判断长短是否为零是true否为false
}

}
